La section 3 vous présentera un mode d'emploi de vi, éditeur de texte en mode console très répandu mais un peu difficile d'approche.
3.4 - Édition de texte avec vi
3.6 - Sauvegarder et quitter vi
3.7 - Préfixer une commande d'un nombre
3.9 - Je déteste vi et je n'ai pas de mode graphique, au secours!
3.1 - vi, éditeur satanique
vi est un éditeur de texte qui est soit adoré ou détesté mais qui ne laisse personne indifférent. Pour un nouvel utilisateur, vi est rébarbatif puisque ses commandes sont rarement intuitives et que son fonctionnement en deux modes diffère de tout autre éditeur de texte avec lequel on est habitué de travailler.
Toutefois, une fois qu’on est habitué à son utilisation, le fait que son interface soit ultrasimple et minimaliste a un certain attrait puisqu’elle réduit le temps d’attente et n’essaie pas de taper le texte à notre place comme d’autres traitements de texte que l’on ne nommera pas.
En plus, et c’est là le gros avantage de vi, il est standard avec toute version ou distribution de Unix et ses dérivés (Linux, AIX, BSD, …). Une fois qu’on le connaît, on est donc certain que peu importe où on est, on ne sera jamais mal pris lorsque viendra le temps d’éditer un fichier – ce qui est une tâche très courante dans le monde Unix, puisque toutes les configurations sont dans des fichiers texte.
Finalement, plusieurs autres applications reconnaissent les commandes de vi (essayez-les dans man par exemple), c'est donc utile de connaître les principales.
vi est maintenant un culte chez une certaine catégorie de programmeurs ou administrateurs de systèmes, alors le connaître vous ouvre les portes d’un club élitiste non officiel mais fort puissant... (Il ne faut pas prendre cette dernière remarque trop au sérieux, mais il y a tout de même un (petit) fond de vérité à ça...)
Retour à la table des matières de la section
Un éditeur de texte plus standard n’a qu’un seul mode : le mode d’édition. Lorsque vous ouvrez l’éditeur et que vous tapez du texte, il s’inscrit à l’endroit où se trouve votre curseur. Pour faire des commandes connexes, on utilise alors des touches de fonctions (F1 à F12), des combinaisons de touches (comme CTRL-v ou ALT-F1) ou la souris. Les touches ou combinaisons de touches utilisées pour faire des commandes ne correspondent pas à des caractères imprimables donc l’éditeur de texte n’écrira rien quand vous les utiliserez – il exécutera plutôt une commande.
À la différence de ces éditeurs, vi a pour but de pouvoir fonctionner sur n’importe quel système, avec n’importe quelle configuration de clavier. Il bannira alors l’utilisation de touches comme CTRL, ALT, F1, Page Up, Page Down et toutes les autres qui peuvent ne pas être présentes ou correctement configurées sur un clavier, particulièrement si vous êtes connectés à distance avec un terminal limité. Même les touches de curseur peuvent ne pas fonctionner et vous pourrez tout de même arriver à vous déplacer dans votre texte.
En vi, la majorité des commandes sont appelées avec des touches de texte bien ordinaires comme des lettres (minuscules ou majuscules), des chiffres et de temps en temps des symboles (comme le / ou le :). Plusieurs commandes sont appelées avec des combinaisons de touches mais plutôt que de combiner une touche non imprimable (comme CTRL) à une touche texte (comme v) qui doivent être tapées en même temps, vi utilise des combinaisons de touches texte qui doivent être tapées une après l’autre (comme dd ou :w). Notez tout de même qu'avec le temps et la standardisation de touches comme CTRL, certaines nouvelles commandes vi les utilisant ont été ajoutées... Mais elles ne sont toutefois pas majoritaires.
Alors, si dd permet d’effacer une ligne et u d’annuler la dernière commande, comment faire pour simplement écrire u ou dd dans son texte? C’est pour cette raison que les deux modes de vi ont été créés. Quand vous êtes en mode insertion, tout ce que vous tapez est écrit dans votre texte. Quand vous êtes en mode commande, tout ce que vous tapez est interprété comme une commande. C'est là la source de nombreux désagréments chez les débutants: il faut porter attention au mode dans lequel on est avant de commencer à écrire du texte ou des commandes.
Retour à la table des matières de la section
3.2.1 - Différencier les modes et passer de l’un à l’autre
Pour passer du mode insertion au mode commande, appuyez simplement sur ESC.
Pour passer du mode commande au mode insertion, utilisez la commande i. Vous serez alors prêt à insérer du texte à l’endroit où se trouve votre curseur. S’il y avait déjà du texte à droite du curseur, ce texte est déplacé vers la droite à mesure que vous tapez. Essayez-le!
Il existe en fait plusieurs autre façons de passer en mode insertion, selon ce que l'on veut faire:
Commande |
Signification |
Passe en mode insertion et insère le nouveau texte… |
i |
Insert |
À gauche du curseur |
a |
Append |
À droite du curseur |
A |
Append (fin de ligne) |
À la fin de la ligne |
o |
Other line |
À la ligne d’en dessous (une nouvelle ligne sera insérée sous la ligne courante) |
O |
Other line (up) |
À la ligne d’au-dessus (une nouvelle ligne sera insérée immédiatement au-dessus de la ligne courante) |
La grosse majorité du temps, on utilisera le i – mais le A est très utilisé aussi.
Il existe une façon de savoir dans quel mode (commande ou insertion) on se trouve à tout moment. Il suffit de taper (en mode commande) :set showmode et d'appuyer sur Enter. À partir de ce moment, lorsque vous êtes en mode insertion, le mot -- INSERT -- est affiché en bas à gauche de l’écran. Quand vous passez en mode commande, ce mot disparaît.
Pour automatiser cette commande et ne pas avoir à la taper à chaque fois qu'on ouvre vi, on peut créer un fichier texte appelé .exrc dans notre répertoire maison (vi s'appelait autrefois ex et rc signifie "read commands" - beaucoup de scripts de configuration ont un nom se terminant par rc). Ce fichier caché sera lu automatiquement par vi lorsqu'on le démarre et toutes les commandes vi qui s'y trouvent seront exécutées. On n'aura qu'à y écrire la ligne set showmode une bonne fois pour toutes (notez que le ":" au début de la commande est facultatif dans le fichier .exrc).
Retour à la table des matières de la section
Le « vrai » vi ne permettait pas, au départ, d’utiliser les flèches pour déplacer le curseur, tout comme il ne permettait pas non plus l’utilisation des touches Page Up, Page Down, End et Home.
Toutefois, comme ces touches sont maintenant beaucoup plus courantes que dans les débuts de vi, elles sont souvent utilisables. Mais les autres façons de se déplacer dans vi demeurent toujours valides et les vrais de vrais puristes les utilisent encore (peut-être que vous aurez à les utiliser un jour si vous êtes connectés à distance avec un terminal limité ou partiellement fonctionnel):
Touche |
Déplacement |
h |
Gauche |
j |
Bas |
k |
Haut |
l |
Droite |
^ |
Début de la ligne courante |
$ |
Fin de la ligne courante |
CTRL-b |
Un écran avant (backward) |
CTRL-f |
Un écran après (forward) |
nG |
À la ligne n. Par défaut (si on omet le chiffre et qu'on écrit juste G), va à la dernière ligne |
CTRL-g |
Affiche notre position dans le fichier (ligne, colonne) ainsi que quelques informations utiles (nombre de lignes au total, nom du fichier...) |
N’oubliez pas que tous les déplacements se font en mode commande et non en mode insertion! Pour utiliser le système de déplacement "pur" de vi, si vous êtes en train de taper du texte, passez en mode commande avec ESC, déplacez votre curseur avec les touches h, j, k et l, repassez en mode insertion avec i puis continuez la rédaction de votre texte (on comprend pourquoi les gens qui apprennent vi aujourd'hui ne se servent pas souvent de cette méthode).
Notez que lorsque les touches standard de déplacement de curseur sont prises en charge (ce qui est presque toujours le cas maintenant), vous pouvez déplacer le curseur sans devoir passer en mode commande puis repasser en mode insertion après. C'est beaucoup plus simple ainsi et il ne faut tout de même pas virer fou.
Retour à la table des matières de la section
Quelques commandes utiles:
Touche |
Commande |
Effet |
yy |
Copier (yank) |
Copie une ligne (qui devra être collée ailleurs après coup) |
dd |
Couper (delete) |
Coupe une ligne (qui devra normalement être collée ailleurs après coup) |
d$ ou D |
Effacer la fin de la ligne (il est en fait coupé et peut être collé) |
Efface du caractère courant jusqu’à la fin de la ligne. |
p |
Coller (paste) |
Colle une ligne copiée ou coupée précédemment (elle sera insérée en dessous de la ligne courante) |
P |
Coller avant (paste) |
Colle une ligne copiée ou coupée précédemment (elle sera insérée au-dessus de la ligne courante) |
x |
Effacer |
Efface le caractère courant – tout le texte suivant recule, comme lorsqu'on utilise la touche Delete du clavier |
r |
Remplacer |
Remplace le caractère courant par le prochain caractère tapé (mais reste en mode commande) |
R |
Mode remplacer |
Passe en mode "replace" – semblable au mode insertion mais écrira par-dessus le texte courant au lieu de le déplacer vers la droite |
J |
Joindre |
Joint la ligne suivante avec la ligne courante (efface le Enter au bout de la ligne courante) |
cw |
Change Word |
Écrit par-dessus le mot courant – si on écrit un mot plus grand, le reste sera ajouté après mais sans remplacer les mots suivants. |
u |
Undo |
Annule la commande précédente |
. |
Redo |
Exécute à nouveau la commande précédente (qu'elle ait été annulée ou non) |
Retour à la table des matières de la section
Touche |
Effet |
/mot |
Recherche la prochaine occurrence de mot dans le texte (vers l’avant) |
?mot |
Recherche la dernière occurrence de mot dans le texte (vers l’arrière) |
n |
Passe à l’occurrence suivante (dans le même sens que la recherche) |
N |
Passe à l’occurrence précédente (dans le sens inverse de la recherche) |
Retour à la table des matières de la section
Touche |
Effet |
:q |
Quitte vi (vi ne vous laissera toutefois pas quitter ainsi si vous avez fait des modifications sans les sauvegarder) |
:q! |
Quitte vi sans sauvegarder les modifications (force vi à quitter même si vous avez fait des modifications – fort utile si vous avez scrapé un fichier accidentellement) |
:w |
Sauvegarde le fichier (vi ne vous laisse pas le faire si le fichier est en lecture seule). On suppose que le fichier a déjà un nom (donc que vous êtes en train d'éditer un fichier existant). |
:w! |
Sauvegarde le fichier, même s'il est en lecture seule. Le fichier reste tout de même en lecture seule. |
:w nom |
Sauvegarde le fichier sous le nom nom. Utile si vous créez un nouveau fichier, ou que vous voulez faire un genre de "Enregistrer sous". |
:wq |
Sauvegarde le fichier et quitte vi |
ZZ |
Sauvegarde le fichier et quitte vi |
Retour à la table des matières de la section
Pratiquement toutes les commandes peuvent être préfixées d’un nombre. Ce nombre dira à vi de faire autant de répétitions de la commande.
Par exemple : dd efface une ligne, 10dd efface 10 lignes, 100dd efface 100 lignes.
On peut préfixer les commandes d’édition comme dd (ou yy si on veut copier plusieurs lignes), mais également les commandes de déplacement (par exemple 5l vous déplacera de 5 caractères vers la droite – 5 suivi de la flèche vers la droite aura le même effet si les touches de curseurs sont prises en charge par vi sur votre système).
On peut même préfixer l’insertion de texte par un nombre! Essayez par exemple ceci :
Magie! "allo" est écrit 10 fois.
Retour à la table des matières de la section
Il existe tout un tas d’autres commandes vi, dont certaines plus complexes et moins souvent utilisées. Une recherche sur vi dans Google vous trouvera des centaines de pages à ce sujet...
Si vous maîtrisez correctement les commandes montrées dans ce document, vous en avez plus qu'assez pour bien vous débrouiller avec vi et il est fort probable que vous n'ayez pas besoin d'en apprendre plus.
Au minimum, vous devriez savoir comment passer du mode commande au mode insertion (et vice-versa), puis comment quitter sans sauvegarder et quitter en sauvegardant. Ça pourra vous sauver la mise un jour. Tout le reste, c'est du bonus!
Retour à la table des matières de la section
Il existe des tonnes d'autres éditeurs de texte utilisable dans un terminal (donc en mode console texte), dont plusieurs beaucoup plus faciles à utiliser que vi. Évidemment, tout dépendamment de votre distribution et de votre installation, vous n'aurez jamais de garantie qu'un éditeur particulier est disponible.
Un éditeur populaire et efficace est pico. Il ressemble pas mal plus à un éditeur texte standard, comme le bon vieux edit de DOS. Lorsqu'on tape du texte, ça écrit du texte et pour faire des commandes on utilise des combinaisons de touches comme CTRL-X. Les combinaisons de touches utiles sont même écrites à l'écran pour que vous ne puissiez pas les oublier. Il faut juste savoir que la notation ^X signifie CTRL-X et on est en affaires.
Évidemment, si vous avez accès à une console X-Windows, vous pouvez très bien utiliser un éditeur graphique, comme gedit (qu'on peut démarrer en tapant son nom dans une fenêtre terminal, ou en allant dans Applications->Accessoires).
Retour à la table des matières de la section